iT邦幫忙

1

使用 Github Actions 排程執行程式

  • 分享至 

  • xImage
  •  

本文主要記錄使用 Github Actions 排程執行程式的學習心得,文章中如有不正確還請見諒並請讓我知道。

Github Actions 簡介

GitHub Actions ,GitHub 平台內建的自動化工具,主要用於 CICD,不過特性是只要在發生特定事件時,就會自動執行定義的任務,所以也能用於排程執行程式。

  • Workflow(工作流程)
    一套自動化流程,定義在一個 YAML 檔案中,存放在專案的 .github/workflows/ 路徑下。
    工作流程會根據觸發條件(例如:push、pull request、或定時任務)自動執行。
  • Jobs(工作)
    一個 Workflow 可以包含一個或多個工作。
    每個工作是由一連串步驟組成,並會在同一台 Runner (執行器)上執行。工作之間可以設置依賴關係,看要 Serial 或 Parallel 執行。
  • Steps(步驟)
    步驟是工作中執行的最小單位,可以是一個 Action 或指令。
  • Actions(動作)
    Action 是可重用的程式碼模組,GitHub Marketplace 有許多現成的 Action 可以取用,可以透過 use 引用。
  • Runner(執行器)
    Runner 是執行工作(Job)的虛擬機或容器,可以選擇不同的作業系統。
  • Trigger(觸發條件)
    透過 on 設定,可以定義哪些事件(例如:程式碼推送、發起 Pull Request、或排程任務)觸發 Workflow。

排程執行程式

要排程執行程式即是把 Trigger 設定在特定時間點到點時觸發 Workflow 。
在專案的 .github/workflows/ 路徑下建立 YAML 檔,例如在每天00:00時觸發,包含一個 job 其中設定了底下的 steps 在 runner 設定為 ubuntu 最新版本的環境下運行,而共定義了有3個 step 在 job 中:

  1. 透過 use 引用官方提供的 action 模組,用來 fetch 程式碼,讓後續步驟可以存取程式碼
  2. 在 use 引用 python的 action 後 , 使用 with 來設定引用的參數,例如把 Python 環境指定版本為 3.13。
  3. 直接 run 執行指令 python helloWorld.py
name: Hello World

on:  # Trigger
  schedule:
    - cron: '0 16 * * *'  # cron 語法 UTC 16:00 = 台灣 UTC+8 = 00:00,每天執行
  workflow_dispatch:  # 允許手動觸發

jobs:  #Jobs
  hello:  # first job's name
    runs-on: ubuntu-latest  # Runner 設定
    steps:  #定義步驟
      - name: 檢出程式碼
        uses: actions/checkout@v4  #官方提供的 Action,用來 fetch 程式碼,讓後續步驟可以存取程式碼。

      - name: 設定 Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.13'

      - name: 執行程式
        run: python helloWorld.py

結語

之所以想要排程執行程式是為了自動化爬蟲,希望接續之前的文章 PTT爬蟲 - 表特版,不過以我的使用情境來說這個方法是不可行的,因為PTT會封鎖雲端IP(情報來源 pyptt : ptt第三方API 的readme文件;直接搜尋PTT robots txt/爬蟲規範找不到甚麼結果),所以後來還是選擇在本地排程執行,不過還是把對 Github Actions 的理解和基礎的設定記錄了下來。


.

尚未有邦友留言

立即登入留言